public class TestDemo {

    int val = 100;//这是一个成员变量
    //成员变量有默认值，局部变量没有

    public static void main(String[] args) {
        //>>>符号，无符号右移
        //因为普通右移要补符号位，>>>总是补0
        System.out.println(-1 >> 1);
        System.out.println(-1 >>> 1);
    }

    public static void main10(String[] args) {
        System.out.println(10 > 20 && 10 / 0 == 0);//有假就假
        System.out.println(10 < 20 || 10 / 0 == 0);//有真就真
    }

    public static void main9(String[] args) {
        short a = 10;
        a = (short)(a + 9);//这里不转 会报错
        a += 9;//这样会自动强制类型转换
        System.out.println(a);
    }

    public static void main8(String[] args) {
        //运算符
        System.out.println(11.5 % 2);
        System.out.println(-10 % 3);
        System.out.println(10 % -3);
        System.out.println(-10 % -3);
    }

    public static void main7(String[] args) {
        //int与String转换
        //整数变字符串
        int num = 10;
        String ret = String.valueOf(num);
        System.out.println(ret);
        //字符串变整数
        String str = "123";
        int ret1 = Integer.valueOf(str);
        System.out.println(ret1);
    }

    public static void main6(String[] args) {
        //类型提升,都有风险,只为效率高
        byte a = 1;
        byte b = 2;
        byte c = (byte)(a + b);//运算结果会类型提升为int,需要类型转换
        System.out.println(c);
        byte c1 = 1 + 2;//字面值常量相加时，，编译时将结果已经变为3了
        int i1 = 10;
        long l1 = 20;
        int q = (int)(i1 + l1);//两个类型相加,类型变为较大的那个
    }

    public static void main5(String[] args) {
        //常量分为字面值常量和final常量
        final int A = 10;
        //类型转换
        int a = 10;
        long b = a;//4个字节可以给8个字节，反之不行
        System.out.println(b);
        long c = 111111111111L;
        int d = (int)c;//可以强制类型转换，但精度不一定够
        System.out.println(d);
        //那么boolean和int呢?布尔类型不是数值，不可以
    }

    public static void main4(String[] args) {
        //在java中没有全局变量概念
        //只分为成员变量和局部变量
        {
            int a = 99;
        }
        //System.out.println(a);//这样不行
    }

    public static void main3(String[] args) {
        //转义字符, 要打印“bit”咋搞
        String s1 = "\"bit\"";
        String s2 = "\\bit\\";
        System.out.println(s1);
        System.out.println(s2);
    }

    public static void main2(String[] args) {
        //字符串拼接
        System.out.println("hello" + "world");
        //其他数据类型和字符串使用拼接，结果就是一个字符串
        System.out.println("hello" + 10 + 20);//hello1020
        //但拼接有个顺序,在拼接之前能进行运算
        System.out.println(10 + 20 + "hello");//30hello
        System.out.println("hello" + (10 + 20));
        System.out.println(10 + "" + 20 + "hello");
        //a = 10, b = 20
        System.out.println("a=" + 10 + ", b=" + 20);
    }

    public static void main1(String[] args) {
        boolean fla1 = true;
        String str = "hello";
        //String 是引用类型, boolean 是基本数据类型
        //引用类型还有数组、类、接口、枚举
        System.out.println(fla1);
        System.out.println(str);
    }

}